package movilmax.sia_corp.action;

import java.util.LinkedList;
import java.util.Map;

import movilmax.sia_corp.model.DetalleFalla;
import movilmax.sia_corp.model.Falla;
import movilmax.sia_corp.model.Usuario;
import apli.conectar.Conectar;
import basedatos.Fecha;
import basedatos.Resultado;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ReporteFallas extends ActionSupport{

	private static final long serialVersionUID = 8043189467266124638L;
	private LinkedList<Falla> rpt_lista;
	private String fechai;
	private String fechaf;
	private String departamento;
	private String nodo;
	private String tipoFalla;
	private String statusTicket;
	private String codF;
	private DetalleFalla detalleF;
	//private Fecha F = new Fecha();
	LinkedList<DetalleFalla> lista_detTk;
	
	
	@SuppressWarnings("rawtypes")
	public String consultarFallas(){
		
		rpt_lista=new LinkedList<Falla>();
		String SQL="",c1="",c2="",c3="",c4="",c5="";
		Map session = ActionContext.getContext().getSession();
    	Usuario USUARIO = (Usuario) session.get("ses_usuario");
		if(USUARIO==null){
			this.addActionError("La sesion del usuario ha caducado" ); 
			return ERROR;
		}
		Conectar BASE=new Conectar();
		if(!BASE.getMsg().equals("SI")){
			this.addActionError("No hay conexion al servidor");
			return ERROR;
		}
		
	/*-------------------------------------condiciones por filtro------------------------------------*/
		
		if( this.getFechai() !=null && this.getFechaf() !=null ){
			if (!this.getFechai().equals("") && !this.getFechaf().equals("") ){
				c1=" and F.fecha BETWEEN '" + this.getFechai() + "' and  '" + this.getFechaf()+"' " ;
			}
		}
		if(!this.getDepartamento().equals("-1") ){
    		c2=" and D.cod='"+ this.getDepartamento() +"' " ;
    	}
		
		if(!this.getNodo().equals("-1") ){
			c3=" and R.cod='"+this.getNodo()+"' ";
    	}
		
		if(!this.getTipoFalla().equals("-1") ){
			c4="  and TF.cod='"+this.getTipoFalla() +"' ";
    	}
		
		if(!this.getStatusTicket().equals("-1") ){
			c5= " and S.cod='"+this.getStatusTicket()+"' ";
    	}
		
		
		/*-------------------------------------fin condiciones por filtro------------------------------------*/		
		SQL="SELECT F.codigo, R.descripcion as nodo, TF.descripcion as tipo_falla,D.descripcion as departamento, S.descripcion as status,F.fecha,F.hora"+
			" FROM  mon_fallas F, mon_detalle_fallas DF, radio_bases R, departamentos D, mon_tipos_falla TF, status_tickets S "+
			" WHERE F.codigo=DF.falla AND F.responsable = D.cod AND F.nodo= R.cod AND F.tipo= TF.cod AND F.[status]=S.cod"+ c1 + c2 + c3 + c4 + c5 +
			" GROUP BY F.codigo, R.descripcion, TF.descripcion, D.descripcion, S.descripcion,F.fecha,F.hora";
		Resultado RCS=BASE.getBaseDatos().consultar(SQL);
		Resultado RCS_= new Resultado();
		LinkedList<DetalleFalla> lista_detTk = new LinkedList<>();
		Fecha F = new Fecha();
		boolean x=false;
		  if(RCS.RP){
			  do{ 
				  Falla ITM= new Falla();
				  ITM.setCodigo(RCS.getCadena("codigo"));
				  ITM.setNodo(RCS.getCadena("nodo"));
				  ITM.setTipo(RCS.getCadena("tipo_falla"));
				  ITM.setResponsable(RCS.getCadena("departamento"));
				  ITM.setStatus(RCS.getCadena("status"));
				  ITM.setFecha(F.formateaFecha(RCS.getCadena("fecha"),true));
				  ITM.setHora(RCS.getCadena("hora"));
				  
				  SQL="SELECT TOP 1 DF.* FROM mon_detalle_fallas DF, mon_fallas F WHERE DF.falla=F.codigo AND DF.falla='"+ITM.getCodigo()+"'";
				  RCS_=BASE.getBaseDatos().consultar(SQL);
				  if(RCS_.RP){
					  do{
						   detalleF=new DetalleFalla();
						   detalleF.setFalla(RCS.getCadena("falla"));
						   detalleF.setUsuario(RCS.getCadena("usuario"));
						   detalleF.setFecha(F.formateaFecha(RCS.getCadena("fecha"), true));
						   detalleF.setHora(RCS.getCadena("hora"));
						   detalleF.setObs(RCS.getCadena("obs"));
						   lista_detTk.add(detalleF);
					  }while(RCS_.sigItem());
				  }
				  ITM.setDetalle_falla(lista_detTk);
				  if(!RCS.getCadena("status").equals("0")){
					  x=(x ? false: true);
					  if(x)
					    ITM.setStylo("tabla_fil_normal1");
					  else
						ITM.setStylo("tabla_fil_normal2");  
				  }else{
					  ITM.setStylo("tabla_fil_anulado");
				  }
				  rpt_lista.add(ITM);
			  }while(RCS.sigItem()); 
		  }
		BASE.getBaseDatos().cerrarConexion();
		return SUCCESS;
	
	}
//------------------------------------------Metodo Consultar Detalles x Falla
public String consultarDetallesFalla(){
		
		Fecha F = new Fecha();
	  	detalleF=new DetalleFalla();
	  	Resultado RCS = new Resultado();
	  	lista_detTk= new LinkedList<>();
	  	boolean x=false;
	  	String SQL;
	  	Map<?, ?> session = ActionContext.getContext().getSession();
    	Usuario USUARIO = (Usuario) session.get("ses_usuario");
    	
    	
		if(USUARIO==null){
			this.addActionError("La sesion del usuario ha caducado" ); 
			return ERROR;
		}
		Conectar BASE=new Conectar();
		if(!BASE.getMsg().equals("SI")){
			this.addActionError("No hay conexion al servidor");
			return ERROR;
		}
		
		SQL="SELECT DF.* FROM mon_detalle_fallas DF, mon_fallas F WHERE DF.falla=F.codigo AND DF.falla='"+this.getCodF()+"' order by item ASC";
		RCS=BASE.getBaseDatos().consultar(SQL);
		  if(RCS.RP){
			  do{
				   detalleF=new DetalleFalla();
				   detalleF.setFalla(RCS.getCadena("falla"));
				   detalleF.setUsuario(RCS.getCadena("usuario"));
				   detalleF.setFecha(F.formateaFecha(RCS.getCadena("fecha"), true));
				   detalleF.setHora(RCS.getCadena("hora"));
				   detalleF.setObs(RCS.getCadena("obs"));
				   x=(x ? false: true);
					  if(x)
						  detalleF.setStylo("tabla_fil_normal1");
					  else
						  detalleF.setStylo("tabla_fil_normal2"); 
				   lista_detTk.add(detalleF);
			  }while(RCS.sigItem());
		  }
		  BASE.getBaseDatos().cerrarConexion();
		return SUCCESS;
	}







//-----------------------------------GETTERS AND SETTERS------------------------------------------------------//

	public String getFechai() {
		return fechai;
	}
	public void setFechai(String fechai) {
		this.fechai = fechai;
	}
	public String getFechaf() {
		return fechaf;
	}
	public void setFechaf(String fechaf) {
		this.fechaf = fechaf;
	}
	public String getDepartamento() {
		return departamento;
	}
	public void setDepartamento(String departamento) {
		this.departamento = departamento;
	}
	public String getNodo() {
		return nodo;
	}
	public void setNodo(String nodo) {
		this.nodo = nodo;
	}
	public String getTipoFalla() {
		return tipoFalla;
	}
	public void setTipoFalla(String tipoFalla) {
		this.tipoFalla = tipoFalla;
	}
	public String getStatusTicket() {
		return statusTicket;
	}
	public void setStatusTicket(String statusTicket) {
		this.statusTicket = statusTicket;
	}
	public LinkedList<Falla> getRpt_lista() {
		return rpt_lista;
	}
	public void setRpt_lista(LinkedList<Falla> rpt_lista) {
		this.rpt_lista = rpt_lista;
	}
	public String getCodF() {
		return codF;
	}
	public void setCodF(String codF) {
		this.codF = codF;
	}
	public DetalleFalla getDetalleF() {
		return detalleF;
	}
	public void setDetalleF(DetalleFalla detalleF) {
		this.detalleF = detalleF;
	}
	public LinkedList<DetalleFalla> getLista_detTk() {
		return lista_detTk;
	}
	public void setLista_detTk(LinkedList<DetalleFalla> lista_detTk) {
		this.lista_detTk = lista_detTk;
	}
	
}
